{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n",
" Si c'est votre première visite dans ce TP, lisez attentivement chacun des points détaillé après ce paragraphe.
\n",
" Si vous avez déjà commencer à travailler sur ce TP et que vous souhaiter vous déplacer rapidement dans une partie précise vous pouvez choisir la partie que vous souhaitez rejoindre ci-dessous.
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
\n",
" La technologie jupyter permet d'exécuter du code python par un simple clique sur Executer ci-dessus.
\n",
" Les morceaux de code de cette page sont interprétées case par case. Pour savoir quelle case a été interprétée avant une autre, il suffit de repérer le numéro devant la case.
\n",
" Une fois qu'une case a été interprétée (=exécutée), la page garde en mémoire les variables et fonctions lues
\n",
" La plateforme propose quelques outils de purge de la mémoire : \n",
"
\n",
" Pour ne pas perdre votre travail pensez à le sauvegarder régulièrement. Par défault, la sauvegarde par un clic sur la disquette en haut à gauche de page, ou par le racourci clavier classique ctrl+S
\n",
" est une sauvegarde en local, sur le serveur de jupyter. Vous pouvez et devez très régulièrement sauvegarder votre travail sur votre support personnel de sauvegarde (clef USB, se l'envoyer par mail etc). Ce faisant vous disposerez d'un fichier .ipynb (IPYthon NoteBook) qu'il vous suffira de recharger pour avancer. Après le rechargement assurez vous que les fonctionnalités anciennement developpées et variables utilisées sont bien dans la mémoire de la page (en rééxecutant les cases, ou plus rapidement par Kernel > Restart & Run All.
A NOTER : vous pouvez travailler sur le tp (et tout autre fichier .ipynb) hors connexion en installant une version local du notebook de jupyter. Il faut que votre machine possède un interpreteur de python et que vous soyez connecter à internet.\n", "
pip install jupyterlab
jupyter notebook
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
Comme pour les graphiques classique, il faut définir les listes de coordonnées. Puisqu'il s'agit de dimension 3, il faut en plus de l'abscisse et de l'ordonnée, préciser la côte. Une fois fait, Il faut préciser à python que nous souhaitons faire un graphique en 3D à cette fin, on tape le code suivant : \n",
" \n",
"fig=figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.plot(X, Y, Z)
\n",
" Les options classique de couleur, d'épaisseur de trait etc reste les même que pour les graphique en 2D. Si l'on souhaite faire apparaitre un nuage de point, on peut aussi faire appel à la fonction scatter
comme suit : \n",
" \n",
"fig=figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.scatter(X, Y, Z)\n",
"
\n",
"Enfin, pour rajouter un label aux axes on utilise les commandes suivantes :\n",
" \n",
"fig=figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.plot(X, Y, Z)\n",
"ax.set_xlabel('Abscisses')\n",
"ax.set_ylabel('Ordonnées')\n",
"ax.set_zlabel('Côtes')\n",
"
\n",
"
Exécuter la case suivante pour charger des fonctionnalités sur les matrices (les currieux en développement pourront s'appesantir sur le code)
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Bibliothèque de matrice\n", "def Mat0(n, m=-1) :\n", " try :\n", " n=int(n)\n", " m=int(m)\n", " except : return Mat0(1)\n", " if(n<=0) : return Mat0(1)\n", " if(m<=0) : return Mat0(n, n)\n", " res=[]\n", " for i in range(n):\n", " res.append([])\n", " for j in range(m) : res[i].append(0)\n", " return res\n", "\n", "def MatId(n) :\n", " try : n=int(n)\n", " except : return MatId(1)\n", " if(n<=0) : return MatId(1)\n", " res=Mat0(n, n)\n", " for i in range(n) : res[i][i]=1\n", " return res\n", "\n", "def MatAdd(A, B) :\n", " try :\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " ligB=len(B)\n", " colB=len(B[0])\n", " for i in range(ligB) :\n", " for j in range(colB) : B[i][j]\n", " except : return Mat0(1)\n", " if(ligA!=ligB or colA!=colB or ligA*ligB*colA*colB==0) : return Mat0(1)\n", " res=Mat0(ligA, colA)\n", " for i in range(ligA) :\n", " for j in range(colA) : res[i][j]=A[i][j]+B[i][j]\n", " return res\n", "\n", "def MatOpp(A) :\n", " try :\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " except : return Mat0(1)\n", " res=Mat0(ligA, colA)\n", " for i in range(ligA) :\n", " for j in range(colA) : res[i][j]=-A[i][j]\n", " return res\n", "\n", "def MatSous(A, B) : return MatAdd(A, MatOpp(B))\n", "\n", "def MatProd(A, B) :\n", " try :\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " ligB=len(B)\n", " colB=len(B[0])\n", " for i in range(ligB) :\n", " for j in range(colB) : B[i][j]\n", " except : return Mat0(1)\n", " if(ligB!=colA or ligA*ligB*colA*colB==0) : return Mat0(1)\n", " res=Mat0(ligA, colB)\n", " for i in range(ligA) :\n", " for j in range(colB) : \n", " for k in range(ligB) : res[i][j]+=(A[i][k]*B[k][j])\n", " return res\n", "\n", "def MatX(A, x) :\n", " try :\n", " x=float(x)\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " except : return Mat0(1)\n", " res=Mat0(ligA, colA)\n", " for i in range(ligA) :\n", " for j in range(colA) : res[i][j]=x*A[i][j]\n", " return res\n", " \n", "def MatTransp(A) :\n", " try :\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " except : return Mat0(1)\n", " res=Mat0(colA, ligA)\n", " for i in range(colA) :\n", " for j in range(ligA) : res[i][j]=A[j][i]\n", " return res\n", " \n", "def Mineur(A, p, q) :\n", " try :\n", " p=int(p)\n", " q=int(q)\n", " ligA=len(A)\n", " colA=len(A[0])\n", " for i in range(ligA) :\n", " for j in range(colA) : A[i][j]\n", " except : return A\n", " if(ligA<=1 or colA<=1) : return A\n", " if(p>=ligA or q>=colA) : return A\n", " \n", " res=Mat0(ligA-1, colA-1)\n", " for i in range(ligA-1) :\n", " for j in range(colA-1) :\n", " if(i=q) : res[i][j]=A[i][j+1]\n",
" if(i>=p and j \n",
" Détails des fonctions : \n",
" =p and j>=q) : res[i][j]=A[i+1][j+1]\n",
" return res\n",
"def det(A) :\n",
" try :\n",
" ligA=len(A)\n",
" colA=len(A[0])\n",
" for i in range(ligA) :\n",
" for j in range(colA) : A[i][j]\n",
" except : return 0\n",
" if(ligA!=colA) : return 0\n",
" \n",
" if(ligA==1) : return A[0][0]\n",
" \n",
" res=0\n",
" for i in range(ligA) : res+=(((-1)**i)*A[i][0]*det(Mineur(A, i, 0)))\n",
" return res\n",
"\n",
"def MatCofact(A) :\n",
" try :\n",
" ligA=len(A)\n",
" colA=len(A[0])\n",
" for i in range(ligA) :\n",
" for j in range(colA) : A[i][j]\n",
" except : return Mat0(1)\n",
" if(ligA!=colA) : return Mat0(1)\n",
" \n",
" res=Mat0(ligA, colA)\n",
" for i in range(ligA) :\n",
" for j in range(colA) : res[i][j]=((-1)**(i+j))*det(Mineur(A, i, j))\n",
" return res\n",
"\n",
"def MatInv(A) :\n",
" try :\n",
" ligA=len(A)\n",
" colA=len(A[0])\n",
" for i in range(ligA) :\n",
" for j in range(colA) : A[i][j]\n",
" except : return 0\n",
" if(ligA!=colA) : return Mat0(1)\n",
" \n",
" d=det(A)\n",
" if(d==0) : return Mat0(1)\n",
" \n",
" return MatX(MatTransp(MatCofact(A)),1/d)\n",
"\n",
"def printM(A, precision=-1) : \n",
" try : \n",
" precision=int(precision)\n",
" ligA=len(A)\n",
" colA=len(A[0])\n",
" for i in range(ligA) :\n",
" for j in range(colA) : A[i][j]\n",
" except : print(\"Erreur : le paramètre n'est pas une matrice\")\n",
" \n",
" res=\"\"\n",
" for i in range(ligA) :\n",
" for j in range(colA) :\n",
" if(precision>=0) : res+=str(round(A[i][j], precision))\n",
" else : res+=str(A[i][j])\n",
" if(j
\n",
"
\n",
" Utiliser la case suivante pour tester ces fonctions.\n",
"Mat0(n, m)
: renvoie la matrice nulle à n
lignes et m
colonnes. Le second paramètre est optionnele. S'il n'est pas précisé alors Mat0(n)
renvoie la matrice carré de dimension n
.MatId(n)
: renvoie la matrice identité en dimesion n
.MatAdd(A, B)
: renvoie la somme des matrices A
et B
.MatSous(A, B)
: renvoie la différence entre la matrice A
et la matrice B
.MatProd(A, B)
: renvoie le produit entre la matrice A
et la matrice B
.MatX(A, x)
: renvoie le produit du nombre réel x
par la matrice A
.MatTransp(A)
: revoie la transposée de la matrice A
.det(A)
: renvoie le déterminant de la matrice A
.MatInv(A)
: renvoie l'inverse de la matrice A
.printM(M, precision)
: affiche la matrice A
avec une précision
donnée. Ce dernier paramètre est optionnel. S'il n'est pas précisé printM(M)
affiche la matrice avec toute sa précision.MatRand(n, m, B_min, B_max)
: renvoie une matrice tirée au hasard à n
lignes et m
colonnes où les valeurs sont de nombres réels entre les réels B_min
et B_max
. Ces deux derniers sont optionnelles. S'ils ne sont pas précisés, MatRand(n, m)
renvoie une matrice de dimension n
$\\times$m
à valeur dans $[0 ; 1]$.
$E_2$=\"La matrice est inversible\"\n", "Déterminer empiriquement $\\mathbb{P}(E_2)$.
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
Dans la variable DATA
on a remis les valeurs de la feuille de TD.
Extrayez de cette variable les variables R1
, R2
, C1
et C2
correspondant aux colonnes de ce jeu de donnée. Créer aussi des variables R
et C
correspondant aux revenus et à la consommation du du couple
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
Reprennez les fonctions du TP sur la modélisation linéaire simple
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Outils de la statistique\n", "def moyenne(x) : \n", " return 0\n", "\n", "def covariance(x, y) :\n", " return 0\n", "\n", "def variance(x) : \n", " return 0\n", "\n", "def ecartype(x) : \n", " return 0\n", "\n", "#Modélisation linéaire simple\n", "def achapeau(x, y) : \n", " return 0\n", "\n", "def bchapeau(x, y) : \n", " return 0\n", "\n", "def ychapeau(x, y) :\n", " return []\n", "\n", "def residu(x, y) :\n", " return []\n", "\n", "def RCarre(x, y) :\n", " return 0\n", "\n", "def correlation(x, y) : \n", " return 0\n", "\n", "def schapeau(x, y) : \n", " return 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En utilisant ces focntions réalisez une analyse linéaire simple entre les variables R1
, R2
, C1
, C2
, C
et R
(toutes les combinaisons de paire possible).
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
En utilisant une représentation graphique 3D, représenter le nuage de point entre les variables R1
, R2
, C1
, C2
, C
et R
(toutes les combinaisons de triple possible).
Une modélisation linéaire multiple est de la forme \n",
"$$Y_i=a_{0}+a_ix_{1, i}+\\cdots+a_px_{p, i}+\\varepsilon_i$$\n",
"où $x_{\\alpha, \\beta}$ correspond à la $\\beta$-ième observation du $\\alpha$-ième caractère et $\\varepsilon_i\\sim\\mathcal{N}(0, \\sigma)$.
\n",
" Comme en cours, on modélise la situation sous forme matricielle, $Y=xm+\\varepsilon$.\n",
"
Ecrire la fonction constructX(CARA)
qui prend en paramètre la variable CARA
qui est une liste où chacune des cases est la liste des modalités des caractères étudiés et qui renvoie la matrice $x$. Par exemple, dans le cadre du TD, on appel la fonction constructX([R, C2])
pour obtenir la matrice $$\\begin{pmatrix}\n",
"1&\t14000&\t7344.91\\\\\n",
"1&\t15500&\t8266.82\\\\\n",
"1&\t16000&\t8335.24\\\\\n",
"1&\t18500&\t9795.64\\\\\n",
"1&\t19500&\t10501.29\\\\\n",
"1&\t22500&\t11538.66\\\\\n",
"1&\t23500&\t12301.53\\\\\n",
"1&\t25000&\t13126.63\\\\\n",
"1&\t27000&\t13850.82\\\\\n",
"1&\t30000&\t15501.97\n",
"\\end{pmatrix}\n",
"$$
Ecrire la fonction mchapeau(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et renvoie l'estimation de $m$.
Ecrire la fonction ychapeau2(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie la liste des estimés $\\hat{y}$.
Ecrire la fonction residu2(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie la liste des résidu $y-\\hat{y}$.
Ecrire la fonction RCarre2(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie le $R^2$.
Ecrire la fonction schapeau2(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie l'estimation de $\\sigma$, l'écart-type de l'erreur.
Ecrire la fonction MatCov(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie l'estimation de la matrice de variance-covariance de l'estimateur $M_n$ de $m$.
A l'aide de cette dernière fonction, écrire la fonction etm(x, y)
qui prend en paramètre la matrice x
et les valeurs y
et qui renvoie la liste des estimations des ecart-type des paramètres estimés.
A l'aide des fonctions précédente, répondez aux questions du TD. Attention dans le TD, le modèle est $Z_i = ax_i + by_i + c + \\varepsilon_i$.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A l'aide des fonctions précédentes, toujours sur le jeu de donnée du TD, comparer la modélisation linéaire entre les revenus et la consomation de deux manières : \n", "
Si on réalise une modélisation linéaire multiple pour exprimer les revenus du couple en fonction des revenus de l'individu 1 et des revenus de l'individu 2. A quoi doit-on s'attende ? Vérifier cette hypothèse par le calcul.
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Réalisez une modélisation linéaire multiple pour exprimer la consomation de l'individu 1 (resp. individu 2, resp. couple) en fonction des revenus de l'individu 1 et des revenus de l'individu 2 et des revenus du couple. Commenter et analyser vos résultats
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Réaliser des modélisation linéaire multiple des varaibles R1
, R2
, C1
, C2
et C
pour en exprimer une en fonction de certaines autres. Vous réaliserez toutes les conbinaisons possible (de toutes les dimension possible - il y en a 57 réellement différentes).
\n",
" Menu de navigation
\n",
" \n",
"
\n",
"
Exécuter la case suivante pour charger les données de note au bac de 3380 étudiants candidatant au DUT STID de Villetaneuse.
A vous d'étudier d'éventuelle relation linéaire multiple.
\n",
"Pour faire naitre des idées vous pourrez commencer par une modélisation linéaire simple avec la note de francais (écrit) en abscisse et chacunes des autres notes des matières obligatoire en ordonnées. Vous pourrez aussi, dans le nuage de point, distinguer les femmes des hommes. De même avec la note de science en abscisse.
\n",
" Autre exemple, dans un nuage de point en 3D vous devriez représenter la note de français en abscisse, la note de science en ordonnée et la note de phylosophie pour la côte en mettant des points de différentes couleur en fonction du comportement.
Indice : Il n'y a pas de corrélation linéaire entre les notes des hommes et des femmes, ni entre les notes des différents groupe de comportement.
\n", "En executant la case suivante, vous récupérer une variable PARCOURSUP
de type dictionnaire qui a pour clef, l'identifiant de l'étudiant et pour valeur le champ suivant :
\n",
"\"EtudiantZZZ\": {\n",
"\t\t\"Sexe\" :\"H\",\n",
"\t\t\"Département\" : 94 ,\n",
"\t\t\"Comportement\" :\"A\",\n",
"\t\t\"MatObli\" : {\n",
"\t\t\t\"Français_Oral\" : 19.61 ,\n",
"\t\t\t\"Français_Ecrit\" : 11.57 ,\n",
"\t\t\t\"Philosophie\" : 9.16 ,\n",
"\t\t\t\"HistoireGeo\" : 11.61 ,\n",
"\t\t\t\"LV1\" : 11.82 ,\n",
"\t\t\t\"EPS\" : 12.39 ,\n",
"\t\t\t\"Sciences\" : 11.83 ,\n",
"\t\t},\n",
"\t\t\"MatOpti\" : {\n",
"\t\t\t\"Mathématiques\" : 20 ,\n",
"\t\t\t\"Informatique\" : 8.9 ,\n",
"\t\t}\n",
"\t}\n",
"
\n",
"